ExcelVBAPartsCollection Home Excel Reference Manual DownLoad My Profile
Menu Back Next Links Excel Function Manual Myself My BBS


データ比較・抽出

 





文字列の比較


1 StrComp 関数による比較

 StrComp 関数は、文字列比較の結果を表す値を返します。

[ StrComp 関数の構文 ]
  StrComp(string1, string2[, compare])
  引数の内容は、下表のとおりです。

引 数

内               容

string1 必ず指定します。任意の文字列式を指定します。
string2 必ず指定します。任意の文字列式を指定します。
compare 省略可能です。文字列比較のモードを指定する番号を設定します。省略すると、Option Compare ステートメントの設定により比較モードが決まります。

内               容

-1 Option Compare ステートメントの設定を使用して比較を行います。
0 バイナリ モードの比較を行います。
1 テキスト モードの比較を行います。
2 Microsoft Access の場合のみ有効です。
 
StrComp 関数の戻り値

内          容

戻り値
string1 は string2 未満 -1 
string1 と string2 は等しい  0
string1 は string2 を超える 1
String1 または string2 は Null 値 Null 値

StrComp」関数による文字列の大小比較

処理内容:二つの文字列を比較(バイナリモード比較)
Sub StrComp_1()
Worksheets("Sheet1").Select
Cells(1, 1).Value=10:Cells(1, 2).Value=20
Cells(1, 3) = StrComp(Cells(1, 1), Cells(1, 2), 0)  ' -1 が返る
Cells(2, 1).Value="abc":Cells(2, 2).Value="ABC"
Cells(2, 3) = StrComp(Cells(2, 1), Cells(2, 2), 0)  ' 1 が返る
Cells(3, 1).Value="あいう":Cells(3, 2).Value="アイウ"
Cells(3, 3) = StrComp(Cells(3, 1), Cells(3, 2), 0)  ' -1 が返る
End Sub


処理内容:二つの文字列を比較(テキストモード比較)
Sub StrComp_2()
Worksheets("Sheet1").Select
Cells(1, 1).Value=10:Cells(1, 2).Value=20
Cells(1, 3) = StrComp(Cells(1, 1), Cells(1, 2), 1)  ' -1 が返る
Cells(2, 1).Value="abc":Cells(2, 2).Value="ABC"
Cells(2, 3) = StrComp(Cells(2, 1), Cells(2, 2), 1)  ' 0 が返る
Cells(3, 1).Value="あいう":Cells(3, 2).Value="アイウ"
Cells(3, 3) = StrComp(Cells(3, 1), Cells(3, 2), 1)  ' 0 が返る
End Sub





2 「Like」演算子による文字列比較

 Like 演算子は、2 つの文字列の比較を行います。

[ Like 演算子の構文 ]
  result = string Like pattern
  Like 演算子の構文は、次の指定項目から構成されます。

指定項目

内               容

result 必ず指定します。任意の数値変数を指定します。下記演算結果が返ります。 
 string = pattern ・・・ result = True
 string <> pattern ・・・  result = False
 string = Null Or pattern = Null ・・・  result = Null 
Like 演算子の動作は、Option Compare ステートメントの設定によって異なります。比較の既定の方法は、Option Compare Binary です。
string 必ず指定します。任意の文字列式を指定します。 
pattern 必ず指定します。パターン マッチング規則に従った任意の文字列式を指定します。

文字列式 pattern に指定できる文字と、一致する文字

文字パターン 引数 string の中の一致する文字 
? 任意の 1 文字 
* 任意の数の文字 
# 任意の 1 文字の数字 (0-9) 
[charlist] 文字リスト charlist に指定した文字の中の任意の 1 文字 
[!charlist] 文字リスト charlist に指定した文字以外の任意の 1 文字

「Like」演算子のパターンマッチング

比較文字列 文字列式 文字列式の意味 戻り値
aBbBc a*c 先頭文字が「a」で最後尾文字が「c」である文字列 True
aBbBc *B 最後尾文字が「B」の文字列 False 
aBbBc a* 先頭文字が「a」の文字列 True
aBbBc *b* 文字列のどこかに「b」が含まれている文字列 True
F [A-Z]  AからZの中に含まれている文字列 True
F [!A-Z]  AからZの中に含まれていない文字列 False 
"a2a" a#a aとaの間に半角数字を1文字含んだ文字列 True
aM5b a[L-P]#[!c-e] 「a」の次に「L−P」の間にある文字があり、半角数字を1文字挟んで「c−e」以外の文字がある文字列 True
BAT123khg "B?T*" 先頭文字が「B」で何かの文字の次に「T」がある文字列 True
CAT123khg B?T* 先頭文字が「B」で何かの文字の次に「T」がある文字列 False





「Like」演算子による文字列比較

処理内容:「b」を含む文字列を検索します
Sub Like_1()
Worksheets("Sheet1").Select
Range("A1").Value = "aBbBc"
StrCheck = Range("A1") Like "*b*"
If StrCheck = True Then
MsgBox "b が見つかりました。"  '文字列の中に b は含まれるのでTrueになる
Else
MsgBox "b は含まれていません"
End If
End Sub


処理内容:「f」が入力されている文字列を検索します
Sub Like_2()
Worksheets("Sheet1").Select
Range("A1").Value = "f"
MsgBox Range("A1") Like "[A-Z]"  ' f は小文字だから、A-Z には含まれず、False となる。
End Sub


処理内容:「3」が入力されている文字列を検索します
Sub Like_3()
Worksheets("Sheet1").Select
Range("A2").Value = 3
MsgBox Range("A2") Like "[0-9]"  ' 3 は0-9 に含まれるから、True になる。
End Sub


処理内容:指定範囲の中から文字列検索し、見つかれば該当セル番号を表示します。
Sub Like_4()
Dim Flag As Integer
Worksheets("Sheet1").Select
For Each Rng In Range("B1:B7")
If Rng.Value Like "*文字列*" = True Then
Flag = 1
MsgBox Rng.Address
End If
Next
If Flag = 0 Then
MsgBox "該当データがありません。"
End If
End Sub





文字列内の一部分の文字を抽出


 文字列から指定した数の文字を取り出す関数には、Left 関数、Right 関数、Mid 関数があります。それぞれの機能は、下表のとおりです。

関数名

書    式    と    内    容

Left  文字列の左端から指定した文字数分の文字列を返します。
書式:Left(string, length)
文字列をバイト データとして扱う場合は、LeftB 関数を使用します。LeftB 関数は指定したバイト数分の文字列を取り出します。

引数

内              容

string 必ず指定します。字列を取り出す、元の文字列式を指定します。
length 必ず指定します。文字列から取り出す文字数を先頭からの文字数で指定します。
Right 文字列の右端から指定した文字数分の文字列を返します。
Right(string, length)
文字列をバイト データとして扱う場合、RightB 関数を使用します。RightB 関数は指定したバイト数分の文字列を取り出します。

引数

内              容

string 必ず指定します。字列を取り出す、元の文字列式を指定します。
length 必ず指定します。文字列から取り出す文字数を末尾からの文字数で指定します。
Mid  文字列から指定した文字数分の文字列を返します。
Mid(string, start[, length])
文字列をバイト データとして扱う場合は、MidB 関数を使用します。MidB 関数はバイト単位で文字列を取り出します。

引数

内              容

string 必ず指定します。字列を取り出す、元の文字列式を指定します。
start 必ず指定します。文字列の先頭の位置を 1 として、どの位置から文字列を取り出すかを先頭からの文字数で指定します。
length 省略可能です。取り出す文字数を指定します。省略した場合start から後のすべての文字が返されます。





文字列内の一部分の文字列を抽出

処理内容:文字列の左端から 4 文字抽出
Sub left_1()
Dim MyData As String
MyData = "2000/10/12"
MsgBox "年 = " & Left(MyData,4)  ' 表示内容 「年 = 2000」
End Sub


処理内容:文字列の先頭から 6 文字目から 2 文字抽出
Sub mid_1()
Dim MyData As String
MyData = "2000/10/12"
MsgBox "月 = " & Mid(MyData,6,2)  ' 表示内容 「月 = 10」
End Sub


処理内容:文字列の右端から 2 文字抽出
Sub rightt_1()
Dim MyData As String
MyData = "2000/10/12"
MsgBox "日 = " & Right(MyData,2)  ' 表示内容 「日 = 12」
End Sub





オートフィルタによるデータ抽出


 AutoFilter メソッドは、リストから条件に一致したセルを表示する機能です。1 つのフィールド(列)に指定できる条件は1 つですが、フィールド別に条件を設定することにより、さらに抽出条件を絞り込むことができます。オートフィルタの詳細は、ここをクリックして下さい。

[ AutoFilter メソッドの構文 ]
  expression.AutoFilter(Field, Criteria1, Operator, Criteria2)

 expression は必ず指定します。フィルタを行うリスト範囲内の 1 つのセルを指定します。引数の内容は、下記のとおりです。

引     数 内               容
Field 必ず指定します。フィルタの対象となるフィールド番号を整数で指定します。フィールド番号は、リストの最も左側にある列がフィールド番号 1 になります。
フィールド番号だけ指定して他の引数を省略すると、データをすべて表示します。
Criteria1 省略可能です。抽出条件となる文字列または条件式を指定します。
特定の文字列が入力されているレコードを抽出する場合は、
  Criteria1="検索文字列"
のように指定します。
 "=" と指定すると,空白セルが抽出されます。
  "<>" と指定すると空白以外のフィールドが抽出されます。
  この引数を省略すると、抽出条件は All になります。

 Excel のメニューで「フィルタ」→「オートフィルタ」を選択して、データの見出し部分に表示された▼ボタンをクリックしたときに (すべて),(トップテン),(オプション)も文字があります。(すべて)を選択するとすべてのデータを表示します。その他の機能は、下記のとおりです。

[ トップテン ]
 データの上位又は下位から指定した件数のデータを表示する場合は、Operatorで条件を指定します。
 Operator に xlTop10Items 、xlBottom10Itemsが指定されている場合は、上位または下位からの抽出件数を指定します。
 Operator に xlTop10Percent 、xlBottom10Percentが指定されている場合は、上位または下位からのデータ件数に対する抽出件数のパーセンテージを指定します。

[ オートフィルタオプション ]
 演算子を使用した条件式を設定します。
  Criteria1:="<5"
 上の式では、「5より小さい」を意味します。以下、演算子の種類を示します。
  Criteria1:="=検索値"   '等しい
  Criteria1:="<>検索値"  '等しくない
  Criteria1:=">検索値"   'よりおおきい
  Criteria1:=">=検索値"  '以上
  Criteria1:="<検索値"    'より小さい
  Criteria1:="<=検索値"  '以下
  Criteria1:="=検索値*"  'で始まる
  Criteria1:="<>検索値*"  'で始まらない
  Criteria1:="=*検索値"   'で終わる
  Criteria1:="<>*検索値"   'で終わらない
  Criteria1:="=*検索値*"  'を含む
  Criteria1:="<>*検索値*" 'を含まない

 「身長160cm 以上 170 以下」というように、一定のデータ範囲を検索するときは、
 Criteria1 で下限条件、Criteria2 で上限条件を設定し、Operator (xlAnd,xlOr)で抽出方法を指定します。
 Criteria1:=">=160",Operator:=xlAnd,Criteria1:="<=170"
Operator 省略可能です。抽出方法を指定します。
データのすべてを表示するときは、引数を省略します。
定     数 内          容 備  考
xlAnd Criteria1 の条件と Criteria2 の条件を満たすデータを抽出します。 オプション
xlOr Criteria1 の条件または Criteria2 のいずれかの条件を満たすデータを抽出します。

xlTop10Items 値の上位からCriteria1 で指定した数のデータを抽出します。 トップテン
xlBottom10Items 値の下位からCriteria1 で指定した数のデータを抽出します。
xlTop10Percent 値の上位からCriteria1 で指定したパーセントのデータを抽出します。
データ件数が20件ある場合Criteria1 で 20 を指定すると上位4件を表示します。
xlBottom10Percent 値の下位からCriteria1 で指定したパーセントのデータを抽出します。
データ件数が20件ある場合Criteria1 で10を指定すると下位 2 件を表示します。
Criteria2 省略可能です。2 番目の抽出条件となる文字列を指定します。
Operator で xlAnd または xlOr を使用したときに、2 番目の条件を指定します。 
VisibleDropDown 省略可能です。フィルタのフィールドのオートフィルタのドロップダウン矢印の表示・非表示を指定します。
定     数 内          容
TRUE ドロップダウン矢印を表示します。既定値。
FALSE ドロップダウン矢印を非表示にします。






 以下は、上表をもとに例題を作成しましたので、コードと参照してください。

条件が 1 つのフィールドの場合

処理内容:C列の中で数値が165を超えるデータを抽出します
Sub AutoFilter_1()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
Range("A1").AutoFilter Field:=3, Criteria1:=">165"
End Sub


処理内容:B列の中で「男」のデータを抽出します
Sub AutoFilter_2()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
Range("A1").AutoFilter Field:=2, Criteria1:="男"
End Sub


処理内容:C列の中で数値が 150 以上 165 未満のデータを抽出します
Sub AutoFilter_3()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
Range("A1").AutoFilter Field:=3, Criteria1:=">=150", Operator:=xlAnd, _
Criteria2:="<165"
End Sub


処理内容:D列の中で「愛知県」または「岐阜県」のデータを抽出します
Sub AutoFilter_4()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
Range("A1").AutoFilter Field:=4, Criteria1:="愛知", Operator:=xlOr, _
Criteria2:="岐阜"
End Sub


処理内容:トップテン・・E列で数値の小さい方から(昇順)3 件のデータを抽出します
Sub AutoFilter_5()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
Range("A1").AutoFilter Field:=5,Criteria1:="3",Operator:=xlBottom10Items
End Sub


処理内容:トップテン・・E列で数値の大きい方から(昇順)5%のデータを出します
Sub AutoFilter_6()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
Range("A1").AutoFilter Field:=5,Criteria1:="5",Operator:=xlTop10Percent
End Sub


処理内容:ワイルドカード(「藤」という文字が含まれる者)のリストを抽出します
Sub AutoFilter_7()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
Range("A1").AutoFilter Field:=1, Criteria1:="*藤*"
End Sub

条件が 複数のフィールドの場合

処理内容:B列が「女」でC列が160未満のデータを抽出します
Sub AutoFilter_8()
Worksheets("Sheet1").Select
With Range("A1")
.AutoFilter
.AutoFilter Field:=2, Criteria1:="女"
.AutoFilter Field:=3, Criteria1:="<160"
End With
End Sub


処理内容:B列が「男」、C列が155以上175以下、E列が30以上のデータを抽出します
Sub AutoFilter_9()
Worksheets("Sheet1").Select
With Range("A1")
.AutoFilter
.AutoFilter Field:=2, Criteria1:="男"
.AutoFilter Field:=3, Criteria1:=">=155", _
Operator:=xlAnd, Field:=3, Criteria2:="<=175"
.AutoFilter Field:=5, Criteria1:=">=30"
End With
End Sub

オートフィルタのオンオフ

処理内容:オートフィルタがオンのとき、オフにします
Sub AutoFilter_10()
Worksheets("Sheet1").Select
If FilterMode = True Then
ActiveSheet.ShowAllData
Else
Range("A2").AutoFilter
End If
End Sub


処理内容:オートフィルタをオフにする
Sub AutoFilter_11()
Worksheets("Sheet1").Select
Range("A1").AutoFilter
End Sub


処理内容:オートフィルタモードを調べる
Sub AutoFilter_12()
Worksheets("Sheet1").Select
MsgBox ActiveSheet.AutoFilterMode
End Sub





テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル